package chapter1;

import lombok.extern.slf4j.Slf4j;

/**
 * @author caiya
 * @date 2020/3/12 21:10
 */
@Slf4j

public class ThreadJoinTest {
    public static void main(String[] args) {
        /**
         * 线程的join方法的使用
         * 当一个线程A中调用B线程的join，会导致A线程也被阻塞挂起，这个时候再有线程C调用A的interrupt方法试图中断已经阻塞的
         * 线程A，那么在join方法处会抛出中断异常
         *
         * 事实证明：一个线程在什么地方被挂起，那么在这个地方就有可能被中断，比如wait方法挂起就会在wait调用处抛出InterruptedException、
         * 在join时将自己挂起，那么在join处就有可能抛出InterruptedException
         */

        final Thread threadA = Thread.currentThread();

        Thread threadB = new Thread(new Runnable() {
            @Override
            public void run() {
                for (;;){}
            }
        });
        threadB.start();

        Thread threadC = new Thread(() -> {
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            threadA.interrupt();
        });
        threadC.start();

        try {
            threadB.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
